import request from '@/utils/request'

/**
 * 获取商品列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 当前页码
 * @param {number} params.pageSize - 每页数量
 * @param {string} [params.keyword] - 搜索关键词
 * @param {string} [params.categoryId] - 商品分类ID (UUID格式)
 * @param {string} [params.status] - 商品状态："active"-上架，"locked"-下架
 * @returns {Promise} 返回商品列表数据，格式如下：
 * {
 *   code: 200,
 *   message: "操作成功",
 *   data: {
 *     total: 1, // 总记录数
 *     records: [ // 商品记录数组
 *       {
 *         id: "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11", // String类型(UUID格式)
 *         name: "可乐", // 商品名称
 *         categoryId: "b1eebc99-9c0b-4ef8-bb6d-6bb9bd380a22", // String类型(UUID格式)
 *         category: "饮料", // 分类名称
 *         price: 3.00, // BigDecimal类型
 *         number: 10, // Integer类型，库存数量
 *         imageUrl: "", // 商品图片
 *         status: "active", // 商品状态
 *         createdTime: "2025-03-15T20:43:58", // 创建时间
 *         description: "这是可乐" // 商品描述
 *       }
 *     ]
 *   }
 * }
 */
export function getProductList(params) {
  return request({
    url: '/product/list',
    method: 'get',
    params
  })
}

/**
 * 获取商品详情
 * @param {string} productId - 商品ID (UUID格式)
 * @returns {Promise} 返回商品详细信息，格式如下：
 * {
 *   code: 200,
 *   message: "操作成功",
 *   data: {
 *     id: "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11", // String类型(UUID格式)
 *     name: "可乐", // 商品名称
 *     categoryId: "b1eebc99-9c0b-4ef8-bb6d-6bb9bd380a22", // String类型(UUID格式)
 *     category: "饮料", // 分类名称
 *     price: 3.00, // BigDecimal类型
 *     number: 10, // Integer类型，库存数量
 *     imageUrl: "", // 商品图片
 *     status: "active", // 商品状态
 *     createdTime: "2025-03-15T20:43:58", // 创建时间
 *     description: "这是可乐" // 商品描述
 *   }
 * }
 */
export function getProductDetail(productId) {
  return request({
    url: `/product/${productId}`,
    method: 'get'
  })
}

/**
 * 添加商品
 * @param {Object} data - 商品信息
 * @param {string} data.name - 商品名称
 * @param {string} data.categoryId - 分类ID (UUID格式)
 * @param {number} data.price - 商品价格
 * @param {number} data.stock - 商品库存
 * @param {string} data.image - 商品图片URL
 * @param {string} [data.description] - 商品描述
 * @param {string} [data.status] - 商品状态："active"-上架，"locked"-下架
 * @returns {Promise} 返回添加结果
 */
export function addProduct(data) {
  return request({
    url: '/product/save',
    method: 'post',
    data
  })
}

/**
 * 更新商品信息
 * @param {string} productId - 商品ID (UUID格式)
 * @param {Object} data - 更新的商品信息
 * @param {string} [data.name] - 商品名称
 * @param {string} [data.categoryId] - 分类ID (UUID格式)
 * @param {number} [data.price] - 商品价格
 * @param {number} [data.stock] - 商品库存
 * @param {string} [data.image] - 商品图片URL
 * @param {string} [data.description] - 商品描述
 * @param {string} [data.status] - 商品状态："active"-上架，"locked"-下架
 * @returns {Promise} 返回更新结果
 */
export function updateProduct(productId, data) {
  // 确保productId是字符串类型
  const strProductId = String(productId);
  console.log('更新商品，ID类型:', typeof strProductId, '值:', strProductId);
  
  // 构建更新数据对象，确保使用字符串类型的ID
  const updatedData = { 
    ...data, 
    id: strProductId 
  };
  
  return request({
    url: '/product/save',
    method: 'post',
    data: updatedData
  })
}

/**
 * 删除商品
 * @param {string} productId - 商品ID (UUID格式)
 * @returns {Promise} 返回删除结果
 */
export function deleteProduct(productId) {
  // 确保productId是字符串类型
  const strProductId = String(productId);
  console.log('删除商品，ID类型:', typeof strProductId, '值:', strProductId);
  
  return request({
    url: `/product/${strProductId}`,
    method: 'delete'
  })
}

/**
 * 更新商品状态（上架/下架）
 * @param {string} productId - 商品ID (UUID格式)
 * @param {string} status - 商品状态："active"-上架，"locked"-下架
 * @returns {Promise} 返回状态更新结果
 */
export function updateProductStatus(productId, status) {
  // 确保productId是字符串类型
  const strProductId = String(productId);
  console.log('更新商品状态，ID类型:', typeof strProductId, '值:', strProductId);
  
  // 构建请求体，包含id和status字段
  const data = {
    id: strProductId,
    status: status
  };
  
  return request({
    url: '/product/status',
    method: 'post',
    data
  })
}

/**
 * 获取商品分类列表
 * @param {Object} [params] - 查询参数
 * @param {number} [params.page] - 当前页码
 * @param {number} [params.pageSize] - 每页数量
 * @returns {Promise} 返回分类列表数据，格式如下：
 * {
 *   code: 200,
 *   message: "操作成功",
 *   data: {
 *     total: 1, // 总记录数
 *     records: [ // 分类记录数组
 *       {
 *         id: "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11", // String类型(UUID格式)
 *         name: "饮料", // 分类名称
 *         parentId: "b1eebc99-9c0b-4ef8-bb6d-6bb9bd380a22", // String类型(UUID格式)，父分类ID
 *         productNum: 10, // 该分类下的商品数量
 *         createTime: "2025-03-15T20:43:58", // 创建时间
 *         updateTime: "2025-03-15T20:43:58" // 更新时间
 *       }
 *     ]
 *   }
 * }
 */
export function getCategoryList(params) {
  return request({
    url: '/category/list',
    method: 'get',
    params
  })
}

/**
 * 保存商品分类（添加或修改）
 * @param {Object} data - 分类信息
 * @param {string} [data.id] - 分类ID (UUID格式)，添加时为空，修改时必填
 * @param {string} data.name - 分类名称
 * @param {number} [data.productNum] - 商品数量
 * @param {number} [data.total] - 总数量
 * @param {string} [data.createTime] - 创建时间
 * @param {string} [data.updateTime] - 更新时间
 * @returns {Promise} 返回保存结果
 */
export function saveCategory(data) {
  // 准备请求数据
  const categoryData = {
    id: data.id || '', // 新增时为空字符串
    name: data.name,
    productNum: data.productNum || 0,
    total: data.total || 0,
    createTime: data.createTime || '',
    updateTime: data.updateTime || ''
  };
  
  console.log('保存分类数据:', categoryData);
  
  return request({
    url: '/category/save',
    method: 'post',
    data: categoryData
  })
}

/**
 * @deprecated 请使用 saveCategory 函数代替
 */
export function addCategory(data) {
  return saveCategory(data);
}

/**
 * @deprecated 请使用 saveCategory 函数代替
 * @param {string} categoryId - 分类ID (UUID格式)
 * @param {Object} data - 更新的分类信息
 */
export function updateCategory(categoryId, data) {
  // 确保将ID合并到数据中
  return saveCategory({
    ...data,
    id: categoryId
  });
}

/**
 * 删除商品分类
 * @param {string} categoryId - 分类ID (UUID格式)
 * @returns {Promise} 返回删除结果
 */
export function deleteCategory(categoryId) {
  // 确保categoryId是字符串类型
  const strCategoryId = String(categoryId);
  console.log('删除分类，ID类型:', typeof strCategoryId, '值:', strCategoryId);
  
  return request({
    url: `/category/${strCategoryId}`,
    method: 'delete'
  })
}

/**
 * 批量更新商品库存
 * @param {Array} data - 库存更新数据
 * @param {string} data[].productId - 商品ID (UUID格式)
 * @param {number} data[].stock - 新库存数量
 * @returns {Promise} 返回更新结果
 */
export function batchUpdateStock(data) {
  return request({
    url: '/stock/batch',
    method: 'put',
    data
  })
}

/**
 * 上传商品图片
 * @param {FormData} data - 包含图片文件的 FormData 对象
 * @returns {Promise} 返回上传结果，包含图片URL
 */
export function uploadProductImage(data) {
  return request({
    url: '/product/image/upload',
    method: 'post',
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    data
  })
} 